-- local ServerOHOH = _G.ServerOHOH;
-- local M = ServerOHOH.class.new(script, ServerOHOH.files.Server_PlayerComponent());
-- local Game_Cfg=_G.CommonOHOH.config.Game
-- local Egg_Cfg=_G.CommonOHOH.config.Egg
-- local function_list = ServerOHOH.function_list;
-- local PetTool=_G.CommonOHOH.load.PetTool();
-- local GeneralTool=_G.CommonOHOH.load.GeneralTool();
-- local ItemTool=_G.CommonOHOH.load.ItemTool();
-- local ConnectClass=_G.CommonOHOH.load.Connect();


-- function MergeOne(key,hadList,equipList)
--     local cfg=PetTool.GetPetDataByPetId(key)
--     if not hadList[key] then
--       return false
--     end
--     local need= cfg.merge
--     if need==0 then
--         return false
--     end

--     if hadList[key]<need then
--         return false
--     end
--     local addCount=math.floor(hadList[key]/need)
--     hadList[key]=hadList[key]-  addCount*need
--     local newKey=PetTool.GetUpLevelPetIdByPetId(key)
--     if not hadList[newKey] then
--         hadList[newKey]=addCount
--     else
--         hadList[newKey]= hadList[newKey]+addCount
--     end
--     PetTool.UpdateEquip(key,hadList,equipList)
--     return true
-- end


-- function M.new(self)
-- 	return M(self);
-- end;

-- function M.GetPetBoost(self)
--     local sum=1
--     local OnwedPet=self.Database:GetData("pets").had.__real

--     for k,v in pairs(self.Database:GetData("pets").equip.__real) do
--        sum=sum+PetTool.GetPetBoostValueByPetId(k,OnwedPet)*v
--     end
--     return sum
-- end

-- function M.ctor(self, parent)
-- 	M.super.ctor(self, parent)
--     self.Database= self.parent:GetComponent(ServerOHOH.load.Server_PlayerDataComponent());

--     self.trainningConnect=self.parent.TrainValueMulEvent:Connect(function()
--             return self:GetPetBoost()
--     end)

--     if Game_Cfg.isPetAttackUse then
--         self.attackConnect=self.parent.AttackValueMulEvent:Connect(function()
--             return self:GetPetBoost()
--         end)
--     end

-- 	self.PetCreateEvent=ConnectClass.new() --行走速度
--     self.HatchEggEvent=ConnectClass.new()
-- end;

-- function M.dtor(self)
--     if self.trainningConnect then
--         self.trainningConnect:Disconnect()
--         self.trainningConnect=nil
--     end
-- 	M.super.dtor(self)
-- end;

-- function M.MergeOne(self,petId)
--     local petsData=self.Database:GetData("pets")
--     MergeOne(petId,petsData.had,petsData.equip)

--     self.Database:Execut(function()
-- 	end);
--     self.parent:SynchDataToClient("pets")

--     if self.parent.character then
--         self.parent.character:GetComponent(ServerOHOH.load.Server_PetEquipShow()):UpdatePets()
--     end

--     return true
-- end


-- function M.MergeAll(self)
--     local mergList={}
--     local petsData=self.Database:GetData("pets")

--     for key,v in pairs(petsData.had.__real) do
--         local cfg= PetTool.GetPetDataByPetId(key)
       
--         table.insert(mergList,cfg)
--     end

--     table.sort(mergList,function(a,b)
--         return a.value<b.value
--     end)

--     for _,v in pairs(mergList) do
--         MergeOne(v.petId,petsData.had,petsData.equip)
--     end

--     self.Database:Execut(function()
-- 	end);
-- 	self.parent:SynchDataToClient("pets")
--     if self.parent.character then
--         self.parent.character:GetComponent(ServerOHOH.load.Server_PetEquipShow()):UpdatePets()
--     end

--     return true
-- end

-- function M.Delete(self,list)
--     local petsData=self.Database:GetData("pets")
--     for _,key in pairs(list) do
--         if not petsData.had[key] then
--             continue
--         end
--         if petsData.had[key]>0 then
--             petsData.had[key]=petsData.had[key]-1
--         end
--         PetTool.UpdateEquip(key,petsData.had,petsData.equip)
--     end  

--     self.Database:Execut(function()
-- 	end);
-- 	self.parent:SynchDataToClient("pets")

--     if self.parent.character then
--         self.parent.character:GetComponent(ServerOHOH.load.Server_PetEquipShow()):UpdatePets()
--     end

--     return true
-- end

-- function M.EquipBest(self)

--     local maxEquip=self.Database:GetData("petsPack").equipMax
--     local petsData=self.Database:GetData("pets")


--     local equipList={}
--     for key,v in pairs(petsData.had.__real) do
--         local val=PetTool.GetPetBoostValueByPetId(key,petsData.had.__real)

--         table.insert(equipList,{
--             ["petId"]=key,
--             ["value"]=val,
--         })
--     end

--     table.sort(equipList,function(a,b)
--         -- return Pet_Cfg[a[1]].sortId-a[2]< Pet_Cfg[b[1]].sortId-b[2]
--         return a.value>b.value
--         -- if Pet_Cfg[a[1]].addType>Pet_Cfg[b[1]].addType then
--         --     return true
--         -- elseif Pet_Cfg[a[1]].addType==Pet_Cfg[b[1]].addType then
--         --     return Pet_Cfg[a[1]].value[a[2]]>Pet_Cfg[b[1]].value[b[2]]
--         -- else
--         --     return false
--         -- end

--     end)
--     petsData.equip={}
--     for _,v in pairs(equipList) do
--         if maxEquip==0 then
--             break
--         end
--         local key=v.petId
--         if petsData.had[key]>maxEquip then
--             petsData.equip[key]=maxEquip
--             maxEquip=0
--             break
--         else
--             petsData.equip[key]=petsData.had[key]
--             maxEquip=maxEquip-petsData.had[key]
--         end
--     end

--     self.Database:Execut(function()
-- 	end);
-- 	self.parent:SynchDataToClient("pets")

--     if self.parent.character then
--         self.parent.character:GetComponent(ServerOHOH.load.Server_PetEquipShow()):UpdatePets()
--     end

--     return true
-- end;

-- function M.UnEquipAll(self)
--     local petsData=self.Database:GetData("pets")
--     petsData.equip={}
-- 	self.Database:Execut(function()
-- 	end);
-- 	self.parent:SynchDataToClient("pets")

--     if self.parent.character then
--         self.parent.character:GetComponent(ServerOHOH.load.Server_PetEquipShow()):UpdatePets()
--     end

--     return true
-- end;

-- function M.GetEquipCount(self)
--     local count=0
--     for k,v in pairs(self.Database:GetData("pets").equip.__real) do
--         count=count+v
--     end
--     return count
-- end

-- function M.GetPackCount(self)
--     local count=0
--     for k,v in pairs(self.Database:GetData("pets").had.__real) do
--         count=count+v
--     end
--     return count
-- end
-- function M.Equip(self,list)
--     local petsData=self.Database:GetData("pets")
--     local hadEquip=self:GetEquipCount()
--     local maxEquip=self.Database:GetData("petsPack").equipMax
--     if hadEquip>=maxEquip then
--         return false
--     end

--     for _,key in pairs(list) do
--         if petsData.had.__real[key] and petsData.had.__real[key]>0 then
--             local eq=0
--             if petsData.equip.__real[key] then
--                 eq=petsData.equip.__real[key]
--             end
--             eq=eq+1
--             hadEquip=hadEquip+1

--             if hadEquip>maxEquip then

--                 self.Database:Execut(function()
--                 end);
--                 self.parent:SynchDataToClient("pets")
--                 if self.parent.character then
--                     self.parent.character:GetComponent(ServerOHOH.load.Server_PetEquipShow()):UpdatePets()
--                 end

--                 return false
--             end

--             if petsData.had.__real[key]-eq>=0 then
--                 petsData.equip[key]=eq
--             end
--         end
--     end

--     self.Database:Execut(function()
-- 	end);
-- 	self.parent:SynchDataToClient("pets")
--     if self.parent.character then
--         self.parent.character:GetComponent(ServerOHOH.load.Server_PetEquipShow()):UpdatePets()
--     end
--     return true
-- end
-- function M.UnEquip(self,list)
--     local petsData=self.Database:GetData("pets")
--     for _,key in pairs(list) do
--         if petsData.equip.__real[key] and petsData.equip.__real[key]>0 then
--             petsData.equip[key]=petsData.equip[key]-1
--             if petsData.equip[key]==0 then
--                 petsData.equip[key]=nil
--             end
--         end
--     end

--     self.Database:Execut(function()
-- 	end);
-- 	self.parent:SynchDataToClient("pets")
--     if self.parent.character then
--         self.parent.character:GetComponent(ServerOHOH.load.Server_PetEquipShow()):UpdatePets()
--     end
--     return true
-- end

-- function M.BuyPackBack(self)
--     return true
-- end;

-- function M.BuyEquipSlot(self)
--     return true
-- end;

-- local EventList = ServerOHOH.load.EventList();
-- local ServerEventManager = ServerOHOH.load.ServerEventManager();

-- function M.RubloxHatchEgg(self,eggCfg,count,DeletePetIds)
--     assert(count,"count==nil")
--     local data=self:eggHatch(eggCfg,count,DeletePetIds)
--     if data then
--         ServerEventManager:Fire(self.parent, EventList.Rubux_EggData,eggCfg.id,data);
--         return true;
--     end
--     return false;
-- end
-- function M.RubloxHatchEggCareFly(self,eggCfg,count,DeletePetIds,IsPlay,IsMustAdd)
--     assert(count,"count==nil")
--     local data=nil;
--     if(IsMustAdd)then
--             data=self:EggHatchNotCarePack(eggCfg,count,DeletePetIds);
--         else
--             data=self:eggHatch(eggCfg,count,DeletePetIds)
--     end
--     if data and IsPlay then
--         ServerEventManager:Fire(self.parent, EventList.Rubux_EggData,eggCfg.id,data);
--     end
-- end

-- function M.isCanPutPackCount(self,count)
--     if count+self:GetPackCount()>self.Database:GetData("petsPack").backpack then
--         return false
--     end
--     return true
-- end
-- function M.eggHatch(self,eggCfg,count,DeletePetIds,otherCondition)--摇的数量
--     if not DeletePetIds then
--         DeletePetIds={}
--     end
--     --背包位置不够
--     if not self:isCanPutPackCount(count) then
--         return false
--     end
--     if otherCondition then
--         if not otherCondition() then
--             return false
--         end
--     end
--     --开始摇蛋
--     local data={}
--     for i=1,count do
--         local petId,petModelId=self:RandomCreatePetId(eggCfg)
--         table.insert(data,{
--             PetId=petId,
--             PetModelId=petModelId,
--         })
--     end

--     -- 已经装备宠物的数量
--     local hadEquip=self:GetEquipCount()
--     -- 最大装备宠物数量
--     local maxEquip=self.Database:GetData("petsPack").equipMax

--     local isEquipPet=false
--     --存档
--     local petsData=self.Database:GetData("pets")
--     for _,d in pairs(data) do
--         if DeletePetIds[d.PetModelId] then
--             continue
--         end
--         if petsData.had.__real[d.PetId] then
--             petsData.had[d.PetId]=petsData.had[d.PetId]+1
--         else
--             petsData.had[d.PetId]=1
--         end
--         if hadEquip<maxEquip then

--             if not petsData.equip[d.PetId] then
--                 petsData.equip[d.PetId]=1
--             else
--                 petsData.equip[d.PetId]=petsData.equip[d.PetId]+1
--             end
           
--             isEquipPet=true

--             hadEquip=hadEquip+1
--         end
--     end

--     if isEquipPet  then
--         self.parent.character:GetComponent(ServerOHOH.load.Server_PetEquipShow()):UpdatePets()
--     end

   
--     self.Database:Execut(function()
-- 	end);
--     --同步数据
--     self.parent:SynchDataToClient("pets","base")

--     self.HatchEggEvent:Action(eggCfg.id)
--     return data
-- end
-- function M.EggHatchNotCarePack(self,eggCfg,count,DeletePetIds,otherCondition)--摇的数量
--     if not DeletePetIds then
--         DeletePetIds={}
--     end
--     --背包位置不够
--     -- if not self:isCanPutPackCount(count) then
--     --     return false
--     -- end
--     if otherCondition then
--         if not otherCondition() then
--             return false
--         end
--     end
--     --开始摇蛋
--     local data={}
--     for i=1,count do
--         local petId,petModelId=self:RandomCreatePetId(eggCfg)
--         table.insert(data,{
--             PetId=petId,
--             PetModelId=petModelId,
--         })
--     end

--     -- 已经装备宠物的数量
--     local hadEquip=self:GetEquipCount()
--     -- 最大装备宠物数量
--     local maxEquip=self.Database:GetData("petsPack").equipMax

--     local isEquipPet=false
--     --存档
--     local petsData=self.Database:GetData("pets")
--     for _,d in pairs(data) do
--         if DeletePetIds[d.PetModelId] then
--             continue
--         end
--         if petsData.had.__real[d.PetId] then
--             petsData.had[d.PetId]=petsData.had[d.PetId]+1
--         else
--             petsData.had[d.PetId]=1
--         end
--         if hadEquip<maxEquip then

--             if not petsData.equip[d.PetId] then
--                 petsData.equip[d.PetId]=1
--             else
--                 petsData.equip[d.PetId]=petsData.equip[d.PetId]+1
--             end
           
--             isEquipPet=true

--             hadEquip=hadEquip+1
--         end
--     end

--     if isEquipPet  then
--         self.parent.character:GetComponent(ServerOHOH.load.Server_PetEquipShow()):UpdatePets()
--     end

   
--     self.Database:Execut(function()
-- 	end);
--     --同步数据
--     self.parent:SynchDataToClient("pets","base")

--     self.HatchEggEvent:Action(eggCfg.id)
--     return data
-- end
-- function M.RandomGet(self,eggId,count,DeletePetIds)--摇的数量
--     local eggCfg=Egg_Cfg[eggId]
--    return self:eggHatch(eggCfg,count,DeletePetIds,function()
--         local cost=count*eggCfg.arg
--         if  not ItemTool.IsHadEnough(eggCfg.costId,cost,self.Database) then
--             return false
--         end
--         ItemTool.SaveData(eggCfg.costId,self.Database,-cost)
--         return true
--     end)
-- end;
-- function M.RandomCreatePetId(self,cfg)
--     local index=GeneralTool.RandomLucky(cfg.probability,self.parent:GetPetRandomLucky())
--     local pid=cfg.petIds[index]
--     local petId= PetTool.GetPetId(pid)
--     local arg= self.PetCreateEvent:Action()
--     for _, fuc in arg do
--         petId= fuc(petId)
--     end
--     return petId,pid
-- end




-- M:RegistFunction(function_list.Pets_Equip,M.Equip)
-- M:RegistFunction(function_list.Pets_UnEquip,M.UnEquip)
-- M:RegistFunction(function_list.Pets_UnEquipAll,M.UnEquipAll)
-- M:RegistFunction(function_list.Pets_EquipBest,M.EquipBest)
-- M:RegistFunction(function_list.Pets_Delete,M.Delete)
-- M:RegistFunction(function_list.Pets_MergeAll,M.MergeAll)
-- M:RegistFunction(function_list.Pets_MergeOne,M.MergeOne)
-- M:RegistFunction(function_list.Pets_RandomGet,M.RandomGet)

-- return M